ALLOCATING LANES IN A PERIPHERAL CONNECT INTERFACE EXPRESS (&#39;PCIe&#39;) BUS

ABSTRACT

Allocating lanes in a Peripheral Connect Interface Express (‘PCIe’) bus, including: determining, by a lane allocation module, performance capabilities of a device coupled to the PCIe bus; and allocating, by the lane allocation module, a number of lanes in the PCIe bus for use by the device in dependence upon the performance capabilities of the device.

CROSS-REFERENCE TO RELATED APPLICATION

This application is a continuation application of and claims priorityfrom U.S. patent application Ser. No. 13/974,519, filed on Aug. 23,2013.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The field of the invention is data processing, or, more specifically,methods, apparatus, and products for allocating lanes in a PeripheralConnect Interface Express (‘PCIe’) bus.

2. Description of Related Art

Modern computing systems include peripheral devices that are coupled toa computer processor via an expansion bus. Such an expansion bus may beembodied as a PCIe bus that may be coupled to many different types ofperipheral devices. The number of lanes in a PCIe bus that may beutilized by a peripheral device is typically determined based on thephysical structure of the peripheral device, with no consideration givento the amount of data that the peripheral device will transmit over thePCIe bus.

SUMMARY OF THE INVENTION

Methods, apparatuses, and products for allocating lanes in a PeripheralConnect Interface Express (‘PCIe’) bus, including: determining, by alane allocation module, performance capabilities of a device coupled tothe PCIe bus; and allocating, by the lane allocation module, a number oflanes in the PCIe bus for use by the device in dependence upon theperformance capabilities of the device.

The foregoing and other objects, features and advantages of theinvention will be apparent from the following more particulardescriptions of example embodiments of the invention as illustrated inthe accompanying drawings wherein like reference numbers generallyrepresent like parts of example embodiments of the invention.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 sets forth a block diagram of automated computing machinerycomprising an example computer useful in allocating lanes in a PCIe busaccording to embodiments of the present invention.

FIG. 2 sets forth a flow chart illustrating an example method forallocating lanes in a PCIe bus according to embodiments of the presentinvention.

FIG. 3 sets forth a flow chart illustrating an additional example methodfor allocating lanes in a PCIe bus according to embodiments of thepresent invention.

DETAILED DESCRIPTION OF EXAMPLE EMBODIMENTS

Example methods, apparatus, and products for allocating lanes in aPeripheral Connect Interface Express (‘PCIe’) bus in accordance with thepresent invention are described with reference to the accompanyingdrawings, beginning with FIG. 1. FIG. 1 sets forth a block diagram ofautomated computing machinery comprising an example computer (152)useful in allocating lanes in a PCIe bus according to embodiments of thepresent invention. The computer (152) of FIG. 1 includes at least onecomputer processor (156) or ‘CPU’ as well as random access memory (168)(‘RAM’) which is connected through a high speed memory bus (166) and busadapter (158) to processor (156) and to other components of the computer(152).

Stored in RAM (168) is a lane allocation module (210), a module ofcomputer program instructions for allocating lanes in a PCIe bus, suchas the expansion bus (160) depicted in FIG. 1. PCIe is a high-speedserial computer expansion bus standard. A PCIe bus, such as theexpansion bus (160) depicted in FIG. 1, is a serial computer expansionbus that adheres to the PCIe standard. Such a PCIe bus can includeshared lines such that a PCI host and a connected device each share acommon set of address/data/signal lines. A PCIe bus can include aplurality of lanes, each of which may be composed of two differentialsignaling pairs. The first differential signaling pair can be configuredfor receiving data while the other differential signaling pair can beconfigured for transmitting data. As such, each lane may be composed offour wires or signal traces.

A PCIe bus can include a set number of lanes, each of which providebandwidth to a device that is connected to the PCIe bus. As such,low-speed peripherals such as an 802.11 Wi-Fi adapter may utilize fewerlanes while high-speed peripherals such as a graphics adapter mayutilize more lanes. In such a way, the PCIe bus represents a veryflexible interconnect between two devices—such as a processor and aperipheral device—as the PCIe bus can couple devices that requirevarying bandwidths. The number of lanes utilized to facilitate datacommunications between two devices can be expressed with an ‘X’ prefix,such that X16 represents a sixteen-lane connection while X2 represents atwo-lane connection.

The lane allocation module (210) of FIG. 1 may be configured to allocatelanes in a PCIe bus, for example, by determining performancecapabilities of a device that is coupled to the PCIe bus. Suchperformance capabilities of a device that is coupled to the PCIe bus mayinclude, for example, the rate at which the device can process data.Consider an example in which the device that is coupled to the PCIe busis embodied as a network interface controller (‘NIC’). In such anexample, the performance capabilities of such a device can include thedata transmission rates supported by the NIC. In such a way, a 10 Mb/sEthernet adapter will have different performance capabilities than a 100Mb/s Ethernet adapter. Determining the performance capabilities of adevice that is coupled to the PCIe bus may be carried out, for example,by polling the device for such information, by conducting performancetests on the device to extract such information, and in other ways aswill occur to those of skill in the art.

The lane allocation module (210) of FIG. 1 may be further configured toallocate lanes in a PCIe bus, for example, by allocating a number oflanes in the PCIe bus for use by the device in dependence upon theperformance capabilities of the device. Allocating a number of lanes inthe PCIe bus in dependence upon the performance capabilities of thedevice may be carried out, for example, by allocating enough lanes inthe PCIe bus such that data can be transferred to or from the deviceover the PCIe bus at a rate that allows the device to make use of itsperformance capabilities.

Consider the example described above in which the device is a NIC. Insuch an example, if the performance capabilities of the NIC indicatesthat the NIC is a 10 Mb/s Ethernet adapter, the number of lanes neededby the NIC to allow the NIC to make use of its performance capabilitiesmay be equal to the number of lanes required to transfer data to andfrom the NIC at a rate of 10 Mb/s. Alternatively, if the performancecapabilities of the NIC indicates that the NIC is a 100 Mb/s Ethernetadapter, the number of lanes needed by the NIC to allow the NIC to makeuse of its performance capabilities may be equal to the number of lanesrequired to transfer data to and from the NIC at a rate of 100 Mb/s. Insuch a way, the number of lanes in the PCIe bus that are allocated foruse by the device is a function of the performance capabilities of thedevice.

Also stored in RAM (168) is an operating system (154). Operating systemsuseful allocating lanes in a PCIe bus according to embodiments of thepresent invention include UNIX™ Linux™ Microsoft XP™ AIX™ IBM's i5/OS™and others as will occur to those of skill in the art. The operatingsystem (154) and the lane allocation module (210) in the example of FIG.1 are shown in RAM (168), but many components of such software typicallyare stored in non-volatile memory also, such as, for example, on a diskdrive (170).

The computer (152) of FIG. 1 includes disk drive adapter (172) coupledthrough expansion bus (160) and bus adapter (158) to processor (156) andother components of the computer (152). Disk drive adapter (172)connects non-volatile data storage to the computer (152) in the form ofdisk drive (170). Disk drive adapters useful in computers for allocatinglanes in a PCIe bus according to embodiments of the present inventioninclude Integrated Drive Electronics (‘IDE’) adapters, Small ComputerSystem Interface (‘SCSI’) adapters, and others as will occur to those ofskill in the art. Non-volatile computer memory also may be implementedfor as an optical disk drive, electrically erasable programmableread-only memory (so-called ‘EEPROM’ or ‘Flash’ memory), RAM drives, andso on, as will occur to those of skill in the art.

The example computer (152) of FIG. 1 includes one or more input/output(‘I/O’) adapters (178). I/O adapters implement user-orientedinput/output through, for example, software drivers and computerhardware for controlling output to display devices such as computerdisplay screens, as well as user input from user input devices (181)such as keyboards and mice. The example computer (152) of FIG. 1includes a video adapter (209), which is an example of an I/O adapterspecially designed for graphic output to a display device (180) such asa display screen or computer monitor. Video adapter (209) is connectedto processor (156) through a high speed video bus (164), bus adapter(158), and the front side bus (162), which is also a high speed bus.

The example computer (152) of FIG. 1 includes a communications adapter(167) for data communications with other computers (182), such as astandalone computer, network switch, router, and so on. Thecommunications adapter (167) is also configured for data communicationswith a data communications network (100). Such data communications maybe carried out serially through RS-232 connections, through externalbuses such as a Universal Serial Bus (‘USB’), through datacommunications networks such as IP data communications networks, and inother ways as will occur to those of skill in the art. Communicationsadapters implement the hardware level of data communications throughwhich one computer sends data communications to another computer,directly or through a data communications network. Examples ofcommunications adapters useful for allocating lanes in a PCIe busaccording to embodiments of the present invention include modems forwired dial-up communications, Ethernet (IEEE 802.3) adapters for wireddata communications network communications, and 802.11 adapters forwireless data communications network communications.

For further explanation, FIG. 2 sets forth a flow chart illustrating anexample method for allocating lanes (208) in a PCIe bus (204) accordingto embodiments of the present invention. PCIe is a high-speed serialcomputer expansion bus standard. A PCIe bus (204), as depicted in FIG.2, is a serial computer expansion bus that adheres to the PCIe standard.The PCIe bus (204) of FIG. 2 therefore includes shared lines such that aPCI host and a connected device each share a common set ofaddress/data/signal lines.

In the example of FIG. 2, the PCIe bus (204) includes a plurality oflanes (208). Each lane (208) may be composed of two differentialsignaling pairs. The first differential signaling pair is configured forreceiving data while the other differential signaling pair is configuredfor transmitting data. As such, each lane (208) may be composed of fourwires or signal traces.

The PCIe bus (204) of FIG. 2 includes a set number of lanes (208), eachof which provide additional bandwidth to a device (202) that isconnected to the PCIe bus (204). As such, low-speed peripherals such asan 802.11 Wi-Fi adapter may utilize fewer lanes (208) while high-speedperipherals such as a graphics adapter utilize more lanes (208). In sucha way, the PCIe bus (204) represents a very flexible interconnectbetween two devices—such as a processor (206) and a peripheral device(202)—as the PCIe bus (204) can couple devices that require varyingbandwidths. The number of lanes (208) utilized to facilitate datacommunications between two devices (202, 206) can be expressed with an‘X’ prefix, such that X16 represents a sixteen-lane connection while X2represents a two-lane connection.

The example method of FIG. 2 is carried out, at least partially, by alane allocation module (210). The lane allocation module (210) of FIG. 2may be embodied as a module of computer program instructions executingon computer hardware. The lane allocation module (210) of FIG. 2 mayinclude special purpose instructions for communicating, directly orindirectly, with the device (202), other devices connected to the device(202), a PCIe bus adapter, and other computer hardware for allocatinglanes (208) in the PCIe bus (204).

The example method of FIG. 2 includes determining (212), by a laneallocation module (210), performance capabilities (214) of a device(202) coupled to the PCIe bus (204). In the example method of FIG. 2,performance capabilities (214) of a device (202) coupled to the PCIe bus(204) may represent, for example, the rate at which the device (202) canprocess data. Consider an example in which the device (202) is embodiedas a network interface controller (‘NIC’). In such an example, theperformance capabilities (214) of such a device (202) can include thedata transmission rates supported by the NIC. In such a way, a 10 Mb/sEthernet adapter will have different performance capabilities (214) thana 100 Mb/s Ethernet adapter. In the example method of FIG. 2,determining (212) the performance capabilities (214) of a device (202)coupled to the PCIe bus (204) may be carried out, for example, bypolling the device (202) for such information, by conducting performancetests on the device (202) to extract such information, and in other waysas will occur to those of skill in the art.

The example method of FIG. 2 also includes allocating (216), by the laneallocation module (210), a number of lanes (208) in the PCIe bus (204)for use by the device (202) in dependence upon the performancecapabilities (214) of the device (202). In the example method of FIG. 2,allocating (216) a number of lanes (208) in the PCIe bus (204) for useby the device (202) in dependence upon the performance capabilities(214) of the device (202) may be carried out, for example, by allocatingenough lanes (208) in the PCIe bus (204) such that data can betransferred to or from the device (202) over the PCIe bus (204) at arate that allows the device (202) to make use of its performancecapabilities (214).

Consider the example described above in which the device (202) is a NIC.In such an example, if the performance capabilities (214) of the NICindicates that the NIC is a 10 Mb/s Ethernet adapter, the number oflanes (208) needed by the NIC to allow the NIC to make use of itsperformance capabilities (214) may be equal to the number of lanes (208)required to transfer data to and from the NIC at a rate of 10 Mb/s.Alternatively, if the performance capabilities (214) of the NICindicates that the NIC is a 100 Mb/s Ethernet adapter, the number oflanes (208) needed by the NIC to allow the NIC to make use of itsperformance capabilities (214) may be equal to the number of lanes (208)required to transfer data to and from the NIC at a rate of 100 Mb/s. Insuch a way, the number of lanes (208) in the PCIe bus (204) that areallocated (216) for use by the device (202) is a function of theperformance capabilities (214) of the device (202).

For further explanation, FIG. 3 sets forth a flow chart illustrating anadditional example method for allocating lanes (208) in a PCIe bus (204)according to embodiments of the present invention. The example method ofFIG. 3 is similar to the example method of FIG. 2, as it also includesdetermining (212) performance capabilities (214) of a device (202)coupled to the PCIe bus (204) and allocating (216) a number of lanes(208) in the PCIe bus (204) for use by the device (202) in dependenceupon the performance capabilities (214) of the device (202).

In the example method of FIG. 3, determining (212) performancecapabilities (214) of a device (202) coupled to the PCIe bus (204)includes determining (306) a device type for the device (202) coupled tothe PCIe bus (204). As described above, devices that support high dataprocessing rates may more effectively use a larger number of lanes (208)that devices that support lower data processing rates. As such, it maybe desirable to allocate more lanes (208) to a graphics processor than aslow-speed modem, simply by virtue of the device type of each device. Assuch, the device type for the device (202) may be a useful indetermining (212) the performance capabilities (214) of a device (202).In order to make use of information identifying the device type for thedevice (202) coupled to the PCIe bus (204), the lane allocation module(210) can maintain a table or other repository that associates variousdevice types with the performance capabilities (214) of each devicetype.

In the example method of FIG. 3, determining (306) a device type for thedevice (202) coupled to the PCIe bus (204) can include retrieving (308),from the device (202), vital product data (‘VPD’) for the device (202).Although not illustrated in FIG. 3, the lane allocation module (210) maybe coupled to the device (202), directly or indirectly, via a datacommunications bus such as an I2C bus. As such, the lane allocationmodule (210) may request VPD from the device (202) over the I2C bus. TheVPD for the device (202) can include information identifying the device(202), information identifying a device type for the device (202),information identifying performance capabilities (214) of the device(202), and so on.

In the example method of FIG. 3, determining (212) performancecapabilities (214) of a device (202) coupled to the PCIe bus (204) canalso include determining (310) one or more performance capabilities of adownstream device (304). In the example method of FIG. 3, the downstreamdevice (304) represents a device that is coupled, directly orindirectly, to the device (202) over a data communications channel otherthan the PCIe bus (204). If the device (202) coupled to the PCIe bus(204) is embodied as a wireless NIC, for example, the downstream device(304) may be embodied as a wireless router that is coupled to thewireless NIC for data communications. In such an example, theperformance capabilities of a downstream device (304) can impact theperformance of the device (202) coupled to the PCIe bus (204). Forexample, if the device (202) coupled to the PCIe bus (204) is a wirelessNIC that supports data transfer rates of 100 Mb/s and the downstreamdevice (304) is a wireless router that supports data transfer rates of10 Mb/s, the device (202) that is coupled to the PCIe bus (204) willonly be able to conduct data transfers at a rate of 10 Mb/s whileconnected to the downstream device (304)—in spite of the fact that thedevice (202) itself is capable of a higher rate of data transfers. Insuch a way, the effective performance capabilities (214) of the device(202) is only 10 Mb/s, and as such, the number of lanes (208) allocatedfor use by the device (202) can be set to a number that supports theeffective performance capabilities (214) of the device (202).

In the example method of FIG. 3, determining (310) one or moreperformance capabilities of a downstream device (304) can includeretrieving (312), from the downstream device (304), performancecapabilities of the downstream device (304). In the example method ofFIG. 3, retrieving (312) performance capabilities of the downstreamdevice (304) from the downstream device (304) may be carried out, forexample, by the lane allocation module (210) requesting such informationfrom the downstream device (304), by the lane allocation module (210)requesting device type information from the downstream device (304), bythe lane allocation module (210) initiating performance tests, and soon. For example, when the downstream device (304) is embodied as awireless router as described above, the lane allocation module (210) mayinitiate ping operations directed to the downstream device (304) so asto determine the response time of the downstream device (304).

In the example method of FIG. 3, allocating (216) a number of lanes(208) in the PCIe bus (204) for use by the device (202) in dependenceupon the performance capabilities (214) of the device (202) can includedeallocating (314) one or more lanes (208) in the PCIe bus (204) for useby a second device (302). In the example method of FIG. 3, multipledevices (202, 302) may be coupled to the PCIe bus (204)—although only asingle device may be actively receiving data over the PCIe bus (204) ata given point in time. For example, an Ethernet adapter may be coupledto lanes 0-15 of the PCIe bus (204) and a modem may be coupled to lanes16-19 of the PCIe bus (204). In such an example, data from the processor(206) may be routed to the appropriate device (202, 302) through the useof a multiplexer (not shown) that resides between the processor (206)and devices (202, 302) along the PCIe bus (204). Such a multiplexer maybe configured with information identifying the active connecteddevice—and therefore the lanes over which data should betransmitted—when the system is booted. In such a way, certain lanes areallocated to specific devices even when the connected device is notactive.

In the example method of FIG. 3, allocating (216) a number of lanes(208) in the PCIe bus (204) for use by an active device (202) maytherefore include deallocating (314) one or more lanes (208) in the PCIebus (204) for use by an inactive, second device (302). Consider theexample described above in which an Ethernet adapter is coupled to lanes0-15 of the PCIe bus (204) through a multiplexer and a modem is coupledto lanes 16-19 of the PCIe bus (204) through a multiplexer. Assume thatthe PCIe bus (204) includes 40 lanes (208) and that a graphics adapterthat can utilize 24 lanes is attached to the PCIe bus (204) through amultiplexer. In such an example, only 20 lanes (208) of the PCIe bus(204)—lanes 20-39—are available for use by the graphics adapter. Inorder to allocate 24 lanes (204) to the graphics adapter, some lanes(208) must be deallocated from the Ethernet adapter or the modem. Assuch, allocating (216) a number of lanes (208) in the PCIe bus (204) foruse by the graphics adapter may be carried out by deallocating (314) oneor more lanes (208) in the PCIe bus (204) for use by an inactive, seconddevice (302) such as the modem. In such an example, the multiplexer maybe configured at boot time to allocate lanes (208) 16-39of the PCIe bus(204) to the graphics adapter, leaving no lanes (208) available for theinactive modem.

Example embodiments of the present invention are described largely inthe context of a fully functional computer system for allocating lanesin a PCIe bus. Readers of skill in the art will recognize, however, thatthe present invention also may be embodied in a computer program productdisposed upon computer readable storage media for use with any suitabledata processing system. Such computer readable storage media may be anystorage medium for machine-readable information, including magneticmedia, optical media, or other suitable media. Examples of such mediainclude magnetic disks in hard drives or diskettes, compact disks foroptical drives, magnetic tape, and others as will occur to those ofskill in the art. Persons skilled in the art will immediately recognizethat any computer system having suitable programming means will becapable of executing the steps of the method of the invention asembodied in a computer program product. Persons skilled in the art willrecognize also that, although some of the example embodiments describedin this specification are oriented to software installed and executingon computer hardware, nevertheless, alternative embodiments implementedas firmware or as hardware are well within the scope of the presentinvention.

As will be appreciated by one skilled in the art, aspects of the presentinvention may be embodied as a system, method or computer programproduct. Accordingly, aspects of the present invention may take the formof an entirely hardware embodiment, an entirely software embodiment(including firmware, resident software, micro-code, etc.) or anembodiment combining software and hardware aspects that may allgenerally be referred to herein as a “circuit,” “module” or “system.”Furthermore, aspects of the present invention may take the form of acomputer program product embodied in one or more computer readablemedium(s) having computer readable program code embodied thereon.

Any combination of one or more computer readable medium(s) may beutilized. The computer readable medium may be a computer readable signalmedium or a computer readable storage medium. A computer readablestorage medium may be, for example, but not limited to, an electronic,magnetic, optical, electromagnetic, infrared, or semiconductor system,apparatus, or device, or any suitable combination of the foregoing. Morespecific examples (a non-exhaustive list) of the computer readablestorage medium would include the following: an electrical connectionhaving one or more wires, a portable computer diskette, a hard disk, arandom access memory (RAM), a read-only memory (ROM), an erasableprogrammable read-only memory (EPROM or Flash memory), an optical fiber,a portable compact disc read-only memory (CD-ROM), an optical storagedevice, a magnetic storage device, or any suitable combination of theforegoing. In the context of this document, a computer readable storagemedium may be any tangible medium that can contain, or store a programfor use by or in connection with an instruction execution system,apparatus, or device.

A computer readable signal medium may include a propagated data signalwith computer readable program code embodied therein, for example, inbaseband or as part of a carrier wave. Such a propagated signal may takeany of a variety of forms, including, but not limited to,electro-magnetic, optical, or any suitable combination thereof. Acomputer readable signal medium may be any computer readable medium thatis not a computer readable storage medium and that can communicate,propagate, or transport a program for use by or in connection with aninstruction execution system, apparatus, or device.

Program code embodied on a computer readable medium may be transmittedusing any appropriate medium, including but not limited to wireless,wireline, optical fiber cable, RF, etc., or any suitable combination ofthe foregoing.

Computer program code for carrying out operations for aspects of thepresent invention may be written in any combination of one or moreprogramming languages, including an object oriented programming languagesuch as Java, Smalltalk, C++ or the like and conventional proceduralprogramming languages, such as the “C” programming language or similarprogramming languages. The program code may execute entirely on theuser's computer, partly on the user's computer, as a stand-alonesoftware package, partly on the user's computer and partly on a remotecomputer or entirely on the remote computer or server. In the latterscenario, the remote computer may be connected to the user's computerthrough any type of network, including a local area network (LAN) or awide area network (WAN), or the connection may be made to an externalcomputer (for example, through the Internet using an Internet ServiceProvider).

Aspects of the present invention are described above with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems) and computer program products according to embodiments of theinvention. It will be understood that each block of the flowchartillustrations and/or block diagrams, and combinations of blocks in theflowchart illustrations and/or block diagrams, can be implemented bycomputer program instructions. These computer program instructions maybe provided to a processor of a general purpose computer, specialpurpose computer, or other programmable data processing apparatus toproduce a machine, such that the instructions, which execute via theprocessor of the computer or other programmable data processingapparatus, create means for implementing the functions/acts specified inthe flowchart and/or block diagram block or blocks.

These computer program instructions may also be stored in a computerreadable medium that can direct a computer, other programmable dataprocessing apparatus, or other devices to function in a particularmanner, such that the instructions stored in the computer readablemedium produce an article of manufacture including instructions whichimplement the function/act specified in the flowchart and/or blockdiagram block or blocks.

The computer program instructions may also be loaded onto a computer,other programmable data processing apparatus, or other devices to causea series of operational steps to be performed on the computer, otherprogrammable apparatus or other devices to produce a computerimplemented process such that the instructions which execute on thecomputer or other programmable apparatus provide processes forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks.

The flowchart and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof code, which comprises one or more executable instructions forimplementing the specified logical function(s). It should also be notedthat, in some alternative implementations, the functions noted in theblock may occur out of the order noted in the figures. For example, twoblocks shown in succession may, in fact, be executed substantiallyconcurrently, or the blocks may sometimes be executed in the reverseorder, depending upon the functionality involved. It will also be notedthat each block of the block diagrams and/or flowchart illustration, andcombinations of blocks in the block diagrams and/or flowchartillustration, can be implemented by special purpose hardware-basedsystems that perform the specified functions or acts, or combinations ofspecial purpose hardware and computer instructions.

It will be understood from the foregoing description that modificationsand changes may be made in various embodiments of the present inventionwithout departing from its true spirit. The descriptions in thisspecification are for purposes of illustration only and are not to beconstrued in a limiting sense. The scope of the present invention islimited only by the language of the following claims.

1. A method of allocating lanes in a Peripheral Connect InterfaceExpress (‘PCIe’) bus, the method comprising: determining, by a laneallocation module, performance capabilities of a device coupled to thePCIe bus; and allocating, by the lane allocation module, a number oflanes in the PCIe bus for use by the device in dependence upon theperformance capabilities of the device.
 2. The method of claim 1 whereindetermining performance capabilities of the device coupled to the PCIebus further comprises determining a device type for the device coupledto the PCIe bus.
 3. The method of claim 3 wherein determining a devicetype for the device coupled to the PCIe bus further comprisesretrieving, from the device, vital product data (‘VPD’) for the device.4. The method of claim 1 wherein determining performance capabilities ofthe device coupled to the PCIe bus further comprises determining one ormore performance capabilities of a downstream device.
 5. The method ofclaim 4 wherein determining one or more performance capabilities of adownstream device further comprises retrieving, from the downstreamdevice, performance capabilities of the downstream device.
 6. The methodof claim 1 wherein allocating the number of lanes in the PCIe bus foruse by the device in dependence upon the performance capabilities of thedevice further comprises deallocating one or more lanes in the PCIe busfor use by a second device. 7-20. (canceled)